package command;

import memento.Memento;
import invoker.IIHM;
import receiver.Enregistreur;
import receiver.ME;

public class Selectionner implements Command {

	/**
	 * le moteur d'edition
	 */
	ME moteur;
	/**
	 * L'IHM 
	 */
	IIHM ihm;
	/**
	 * debut de la selection courante
	 */
	int debut;
	/**
	 * fin de la selection courante
	 */
	int fin;
	
	/**
	 * Constuit une commande concrete Selectionner
	 * @param moteur le moteur d'edition
	 * @param ihm l'ihm
	 */
	public Selectionner (ME moteur, IIHM ihm){
		this.moteur = moteur;
		this.ihm = ihm;
	}
	@Override
	public void executer() {
		debut = ihm.getPositionDebut();
		fin = ihm.getPositionFin();
		moteur.selectionner(debut, fin);
		//System.out.println("selectionner executé");
		
		if (Enregistreur.getInstance().isEnMarche())
			Enregistreur.getInstance().enregistrer(this);

	}
	
	@Override
	public void rejouer() {
		moteur.selectionner(debut, fin);
	}
	
	//application du design pattern Memento
	public class MementoSelectionner implements Memento{
		private int debut;
		private int fin;
		
		private MementoSelectionner(int debut , int fin){
			this.debut = debut;
			this.fin = fin;
		}

		public int getDebut() {
			return debut;
		}
		
		public int getFin() {
			return fin;
		}
	
	}
	
	@Override
	public Memento getMemento() {
		return new MementoSelectionner(debut , fin);
	}
	@Override
	public void setMemento(Memento memento) {
		debut = ( (MementoSelectionner) memento).getDebut();
		fin = ( (MementoSelectionner) memento).getFin();
	}


}
